<style type="text/css">
    p {
        position: relative;
    }
    p:not(.ancestor):before {
        position: absolute;
        top: 0;
        left: -22px;
        content: "└ ";
        color: #F00;
    }
</style>

<meta charset="utf8">
<div id="grandpa" name="Andy">
    <p class="ancestor">{{name}} {{family}}</p>

    <div v-component="man" name="Jack">
        <p class="jack">{{name}}, son of {{$parent.name}}</p>

        <div v-component="man" name="Mike">
            <p class="mike">{{name}}, son of {{$parent.name}}</p>

            <div v-component="offspring" name="Tim" class="tim"></div>

            <div v-component="offspring" name="Tom" class="tom"></div>
        </div>

        <div v-component="man" name="Jason">
            <p class="jason">{{name}}, son of {{$parent.name}}</p>

            <div v-component="offspring" name="Andrew" class="andrew"></div>
        </div>
    </div>
</div>

<script type="text/x-template" id="offspring-template">
    <p>{{name}}, son of {{$parent.name}}, grandson of {{$parent.$parent.name}}, great-grandson of {{$root.name}}, and offspring of family {{family}}.</p>
</script>

<script src="../../../dist/vue.js"></script>
<script>
    Vue.config({
        debug: true
    })

    var Man = Vue.extend({
        paramAttributes: ['name']
    })

    var Offspring = Man.extend({
        template: '#offspring-template'
    })

    Vue
        .component('man', Man)
        .component('offspring', Offspring)

    new Man({
        el: '#grandpa',
        data: {
            family: 'Johnson'
        }
    })
    
</script>